package co.com.travelsoft.ati.controller;

import java.util.ArrayList;
import java.util.List;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import co.com.travelsoft.ati.entities.Usuarios;
import co.com.travelsoft.ati.entities.ejb.UsuariosEJB;
import co.com.travelsoft.ati.exception.TravelSoftException;
import co.com.travelsoft.ati.utils.RecursosUtil;

/**
 * Clase delegada que permite la comunicacion 
 * remota con los EJBs que exponen los servicios
 * relativos al usuario en la aplicacion.
 * 
 * @author Luis Eduardo
 *
 */
public class UsuariosDelegate {

	private static final String TRAVEL_SOFT_EJB_USUARIO_EJB_REMOTE = "Travel/UsuariosEJBBean/remote";

	/**
	 * Permite la creacion de un usuario.
	 * @param usuarios
	 * @exception throws TravelSoftException 
	 */
	public void crear(Usuarios usuarios) throws TravelSoftException{
		try {
			InitialContext contexto = RecursosUtil.getContextoInicial();
			UsuariosEJB usuarioEJB = (UsuariosEJB) contexto.lookup(TRAVEL_SOFT_EJB_USUARIO_EJB_REMOTE);		
			usuarioEJB.crear(usuarios);
		} catch (NamingException e) {
			e.printStackTrace();
			throw new TravelSoftException ("Se ha presentado problema de nombramiento EJB al intentar crear Usuario.", e);
		}
	}
	
	/**
	 * Permite buscar un usuario por su identificacion.
	 * @param usuarios
	 * @return Usuarios : un objeto usuario
	 */	
	public Usuarios buscarPorId(Usuarios usuarios){
		try {
			InitialContext contexto = RecursosUtil.getContextoInicial();
			UsuariosEJB usuarioEJB = (UsuariosEJB) contexto.lookup(TRAVEL_SOFT_EJB_USUARIO_EJB_REMOTE);		
			return usuarioEJB.buscarPorId(usuarios);
		} catch (NamingException e) {
			e.printStackTrace();
		}
		return new Usuarios();
	}
	
	/**
	 * Permite listar todos los usuarios existentes.
	 * @return List<Usuarios> : una lista de usuarios
	 */
	public List<Usuarios> listar(){
		try {
			InitialContext contexto = RecursosUtil.getContextoInicial();
			UsuariosEJB usuarioEJB = (UsuariosEJB) contexto.lookup(TRAVEL_SOFT_EJB_USUARIO_EJB_REMOTE);		
			return usuarioEJB.listar();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		return new ArrayList<Usuarios>();
	}
	
	/**
	 * Permite actualizar la informacion de un usuario.
	 * @param usuarios
	 * @exception throws TravelSoftException 
	 */	
	public void actualizar(Usuarios usuarios)  throws TravelSoftException {
		try {
			InitialContext contexto = RecursosUtil.getContextoInicial();
			UsuariosEJB usuarioEJB = (UsuariosEJB) contexto.lookup(TRAVEL_SOFT_EJB_USUARIO_EJB_REMOTE);		
			usuarioEJB.actualizar(usuarios);
		} catch (NamingException e) {
			e.printStackTrace();
			throw new TravelSoftException ("Se ha presentado problema de nombramiento EJB al intentar actualizar Usuario.", e);
		}
	}
	
	/**
	 * Permite borrar un evento.
	 * @param eventos
	 * @exception throws TravelSoftException 
	 */
	public void borrar(Usuarios usuarios)  throws TravelSoftException {
		try {
			InitialContext contexto = RecursosUtil.getContextoInicial();
			UsuariosEJB usuarioEJB = (UsuariosEJB) contexto.lookup(TRAVEL_SOFT_EJB_USUARIO_EJB_REMOTE);		
			usuarioEJB.borrar(usuarios);
		} catch (NamingException e) {
			e.printStackTrace();
			throw new TravelSoftException ("Se ha presentado problema de nombramiento EJB al intentar borrar Usuario.", e);
		}
	}	
	
}
